对于UTF8编码的理解
Introduction
公司的微信获取名称用于显示,但是iphone的emoji字符不好保存,因为某些特殊字符是四个字节的。遂需要了解下utf8
详细介绍utf8
- UTF8代表了Unicode Transformation Format.
- “8”代表他使用8bit表示一个字符单元。
- 他可以用1个字节表示一个字符,也可以用最多四个字节表示一个字符。
他既可以简洁地像ASCII,也包含了所有的unicode字符。
小于等于127,utf8使用一个字节。也就是unicode值得低七位;也和ASCII相同。
小于等于2047,utf8使用两个字节。首字节高两位置1,第三位置0;第二个字节首位置1,第二位置0;
大于等于2048,小于65535,utf8使用3个字节。
下表说明了utf8不同字节数的表示方法
首字节 | 第二字节 | 第三字节 | 第四字节 | 自由位数 | 最大unicode值 |
---|---|---|---|---|---|
0xxxxxxx | 7 | 007F hex (127) | |||
110xxxxx | 10xxxxxx | (5+6)=11 | 07FF hex (2047) | ||
1110xxxx | 10xxxxxx | 10xxxxxx | (4+6+6)=16 | FFFF hex (65535) | |
11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | (3+6+6+6)=21 | 10FFFF hex (1,114,111) |
详情参考原文
ASCII
ASCII(American Standard Code for Information Interchange)包括128个字符,其中33个字符不能显示。
有关ASCII介绍请参考连接
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符,其中33个字符无法显示(这是以现今操作系统为依归,但在DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的用途主要是用来操控已经处理过的文字,在33个字符之外的是95个可显示的字符,包含用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。
utf8和unicode的关系
unicode只规定了符号对应的二进制码,并没有规定这个二进制码如何存储。因为只有知道了怎么存储,才能确定别人书写的字节流代表的意义。例如:
“安”二进制表示为
101101110001001
,如果多个字符连接起来,程序不能判断这个是一个ASCII值,还是一个unicode的“安”
他们之间的关系,以及ASCII的关系,详见原文
结论
得出的结论,如果想要匹配ASCII中的可显示字符,在unicode中一个字符一般由\u开始,后跟4位16进制数。根据查表可知
:可显示字符的十六进制范围是21-7E(除去空格),那末,可ASCII中的显示字符的范围就是\u0021-\u007E.